package cron

import (
	"bigdevops/src/models"
	"context"
	"go.uber.org/zap"
)

// renew map方式

func (ac *AlertCache) RenewMapOndutyGroup(ctx context.Context) {

	//ac.Sc.Logger.Info("RenewMapSendGroup 启动....")

	// 先从数据库中查询出所有
	ondutyGroups, err := models.GetMonitorOndutyGroupAll()
	if err != nil {
		ac.Sc.Logger.Error("[缓存刷新模块]扫描数据库中的ondutyGroups失败",
			zap.Error(err),
		)
		return
	}
	if len(ondutyGroups) == 0 {
		return
	}

	tmpM := map[uint]*models.MonitorOndutyGroup{}
	for _, ondutyGroup := range ondutyGroups {
		ondutyGroup := ondutyGroup
		tmpM[ondutyGroup.ID] = ondutyGroup
	}

	// 模拟 数据量很大，刷新缓存很慢
	//time.Sleep(30 * time.Second)

	ac.OndutyGroupLock.Lock()
	lastNum := len(ac.SendGroupMap)
	ac.OndutyGroupMap = tmpM
	thiNum := len(ac.SendGroupMap)

	ac.OndutyGroupLock.Unlock()
	ac.Sc.Logger.Info("RenewMapOndutyGroup 刷新缓存结果....",
		zap.Any("上一次数量", lastNum),
		zap.Any("这一次数量", thiNum),
	)

}

func (ac *AlertCache) GetOndutyGroupById(id uint) *models.MonitorOndutyGroup {

	ac.OndutyGroupLock.RLock()
	defer ac.OndutyGroupLock.RUnlock()
	return ac.OndutyGroupMap[id]
}
